/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fisica;

import hibernate.Sesion;
import hibernate.objeto.Paciente;
import java.util.Vector;
import org.hibernate.Query;
import presentacion.utilidad.Paginador;

/**
 *
 * @author Gonzalo
 */
public class PacienteFisica extends CapaFisica {

    /**
     * Retorna el vector de objetos Paciente cargados en la base de datos.
     * 
     * @return El vector de objetos Paciente, null si no existe
     */
    public static Vector<Paciente> getVectorPaciente() {
//        return getAll("Paciente p", "order by p.persona.numeroDeDocumentoPersona asc");
        Query q = Sesion.sesion.createQuery(
                "from Paciente p " +
                "order by p.persona.numeroDeDocumentoPersona asc");

        Paginador.paginar(q);

        return getVectorObjetos(q);
    }

    /**
     * Retorna el objeto Paciente según el id.
     *
     * @param id El id del paciente
     * @return El objeto Paciente consultado, null si no existe
     */
    public static Paciente getPacientePorId(int id) {
        Query q = Sesion.sesion.createQuery(
                "from Paciente " +
                "where idPaciente = " + id
                );

        return (Paciente) getObjeto(q);
    }

    /**
     * Retorna el paciente segun el tipo y número de documento.
     *
     * @param tipo El tipo de documento
     * @param numero El número de documento
     * @return El objeto Paciente consultado, null si no existe
     */
    public static Paciente getPacientePorDocumento(String tipo, String numero) {
        Query q = Sesion.sesion.createQuery(
                "select pte from Paciente as pte " +
                "where lower(pte.persona.tipoDeDocumentoPersona) = " +
                "lower('" + tipo + "') and " +
                "pte.persona.numeroDeDocumentoPersona = '" + numero + "'"
                );
        
        return (Paciente) getObjeto(q);
    }

    /**
     * Retorna el objeto paciente según el número de documento y el estado.
     *
     * @param numeroDocumento El número de documento
     * @param estado false si es baja lógica, true si aún activo
     * @return El vector de objetos Paciente consultado, null si no existe
     */
    public static Vector<Paciente> getVectorPacientePorNumeroDocumentoYPorEnBd(
            String numeroDocumento, boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "select p.pacientes " +
                "from Persona p " +
                "where p.numeroDeDocumentoPersona like '%" + numeroDocumento + "%' and "
                + "p.enBdPersona = " + estado
                + " order by p.numeroDeDocumentoPersona asc");

        Paginador.paginar(q);

        return getVectorObjetos(q);
    }

    /**
     * Retorna el vector de objetos paciente según el apellido y el estado.
     *
     * @param apellido El apellido del paciente
     * @param estado false si es baja lógica, true si aún activo
     * @return El vector de objetos Paciente consultado, null si no existe
     */
    public static Vector<Paciente> getVectorPacientePorApellidoYPorEnBd(
            String apellido, boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "select p.pacientes " +
                "from Persona p " +
                "where lower(sinacentos(p.apellidoPersona)) like " +
                "lower(sinacentos('%" + apellido + "%')) " + "and "
                + "p.enBdPersona = " + estado
                + " order by p.apellidoPersona asc");

        Paginador.paginar(q);

        return getVectorObjetos(q);
    }

}
